package pe.edu.upc.matrix.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import pe.edu.upc.matrix.excepcion.EExcepcionDAO;
import pe.edu.upc.matrix.modelo.MCategoria;
import pe.edu.upc.matrix.modelo.MPersona;
import pe.edu.upc.matrix.modelo.MPublicacion;
import pe.edu.upc.matrix.util.UConexionBD;

public class DPublicacion extends DBase {
	
	public MPublicacion registrarPublicacion(MPublicacion mPublicacion) throws EExcepcionDAO {
		
		String query = "insert into tb_publicacion(ID_CATEGORIA, ID_PERSONA, NO_TITULO, NO_DESCRIPCION, "
				+ "ID_ESTADO_CONSERVACION, QTY_PUBLICACION, QTY_STOCK_PUBLICACION, ID_ESTADO_STOCK, QTY_PRECIO, "
				+ "FE_CREACION_PUBLICACION, QTY_DURACION_PUBLICACION, QTY_CLICK, ARC_IMAGEN1, ARC_IMAGEN2, ARC_IMAGEN3) "
				+ "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		try {
			con = UConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, mPublicacion.getCategoria().getIdCategoria());
			stmt.setInt(2,mPublicacion.getPersona().getIdPersona());
			stmt.setString(3, mPublicacion.getNoTitulo());
			stmt.setString(4, mPublicacion.getNoDescripcion());
			stmt.setInt(5, mPublicacion.getIdEstadoConservacion());			
			stmt.setInt(6, mPublicacion.getQtyPublicacion());
			stmt.setInt(7, mPublicacion.getQtyStockPublicacion());
			stmt.setInt(8, mPublicacion.getIdEstadoStock());
			stmt.setDouble(9, mPublicacion.getQtyPrecio());
			stmt.setDate(10, new java.sql.Date(mPublicacion.getFeCreacionPublicacion().getTime()));
			stmt.setInt(11, mPublicacion.getQtyDuracionPublicacion());
			stmt.setInt(12, mPublicacion.getQtyClick());
			stmt.setString(13, mPublicacion.getArcImagen1());
			stmt.setString(14, mPublicacion.getArcImagen2());	
			stmt.setString(15, mPublicacion.getArcImagen3());	
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			mPublicacion.setIdPublicacion(id);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new EExcepcionDAO(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return mPublicacion;
	}
	
	public Collection<MPublicacion> buscarPorTituloDescripcion(MPublicacion mPublicacion) throws EExcepcionDAO {
		
		String query = "select P.ID_PUBLICACION, P.ID_CATEGORIA, P.ID_PERSONA, P.NO_TITULO, P.NO_DESCRIPCION, "
				+ "P.ID_ESTADO_CONSERVACION, P.QTY_PUBLICACION, P.QTY_STOCK_PUBLICACION, P.ID_ESTADO_STOCK, P.QTY_PRECIO, "
				+ "P.FE_CREACION_PUBLICACION, P.QTY_DURACION_PUBLICACION, P.QTY_CLICK, P.ARC_IMAGEN1, P.ARC_IMAGEN2, P.ARC_IMAGEN3, "
				
				+ "C.NO_CATEGORIA, C.DE_CATEGORIA, C.ID_CATEGORIA_PADRE,"
				
				+ "PE.ID_TIPO_PERSONA, PE.NO_PERSONA, PE.NO_PATERNO, PE.NO_MATERNO, PE.ID_SEXO, PE.ID_TIPO_DOCUMENTO, PE.NU_DOCUMENTO, PE.NO_CORREO, PE.NU_CELULAR, PE.FE_NACIMIENTO "
				
				+ "from tb_publicacion P, tb_categoria C, tb_persona PE "
				
				+ "where P.ID_CATEGORIA = C.ID_CATEGORIA and P.ID_PERSONA = PE.ID_PERSONA and (P.NO_TITULO like ? or P.NO_DESCRIPCION like ?)";
		
		Collection<MPublicacion> lista = new ArrayList<MPublicacion>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = UConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + mPublicacion.getNoTitulo() + "%");
			stmt.setString(2, "%" + mPublicacion.getNoDescripcion() + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				MPublicacion mPublicacionTemp = new MPublicacion();
				MCategoria mCategoria = new MCategoria();
				MPersona mPersona = new MPersona();
				
				mCategoria.setIdCategoria(rs.getInt("P.ID_CATEGORIA"));
				mCategoria.setNoCategoria(rs.getString("C.NO_CATEGORIA"));
				mCategoria.setDeCategoria(rs.getString("C.DE_CATEGORIA"));
				mCategoria.setIdCategoriaPadre(rs.getInt("C.ID_CATEGORIA_PADRE"));
				
				mPersona.setIdPersona(rs.getInt("P.ID_PERSONA"));
				mPersona.setIdTipoPersona(rs.getInt("PE.ID_TIPO_PERSONA"));
				mPersona.setNoPersona(rs.getString("PE.NO_PERSONA"));
				mPersona.setNoPaterno(rs.getString("PE.NO_PATERNO"));
				mPersona.setNoMaterno(rs.getString("PE.NO_MATERNO"));
				mPersona.setIdSexo(rs.getInt("PE.ID_SEXO"));
				mPersona.setIdTipoDocumento(rs.getInt("PE.ID_TIPO_DOCUMENTO"));
				mPersona.setNuDocumento(rs.getString("PE.NU_DOCUMENTO"));
				mPersona.setNoCorreo(rs.getString("PE.NO_CORREO"));
				mPersona.setNuCelular(rs.getString("PE.NU_CELULAR"));
				mPersona.setFeNacimiento(rs.getDate("PE.FE_NACIMIENTO"));
				
				mPublicacionTemp.setIdPublicacion(rs.getInt("P.ID_PUBLICACION"));
				mPublicacionTemp.setCategoria(mCategoria);
				mPublicacionTemp.setPersona(mPersona);
				mPublicacionTemp.setNoTitulo(rs.getString("P.NO_TITULO"));
				mPublicacionTemp.setNoDescripcion(rs.getString("P.NO_DESCRIPCION"));
				mPublicacionTemp.setIdEstadoConservacion(rs.getInt("P.ID_ESTADO_CONSERVACION"));
				mPublicacionTemp.setQtyPublicacion(rs.getInt("P.QTY_PUBLICACION"));
				mPublicacionTemp.setQtyStockPublicacion(rs.getInt("P.QTY_STOCK_PUBLICACION"));
				mPublicacionTemp.setIdEstadoStock(rs.getInt("P.ID_ESTADO_STOCK"));
				mPublicacionTemp.setQtyPrecio(rs.getDouble("P.QTY_PRECIO"));
				mPublicacionTemp.setFeCreacionPublicacion(rs.getDate("P.FE_CREACION_PUBLICACION"));
				mPublicacionTemp.setQtyDuracionPublicacion(rs.getInt("P.QTY_DURACION_PUBLICACION"));
				mPublicacionTemp.setQtyClick(rs.getInt("P.QTY_CLICK"));
				mPublicacionTemp.setArcImagen1(rs.getString("P.ARC_IMAGEN1"));
				mPublicacionTemp.setArcImagen2(rs.getString("P.ARC_IMAGEN2"));
				mPublicacionTemp.setArcImagen3(rs.getString("P.ARC_IMAGEN3"));
				
				lista.add(mPublicacionTemp);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new EExcepcionDAO(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
	public Collection<MPublicacion> buscarPorVendedor(int idPersona) throws EExcepcionDAO {
		
		String query = "select P.ID_PUBLICACION, P.ID_CATEGORIA, P.ID_PERSONA, P.NO_TITULO, P.NO_DESCRIPCION, "
			+ "P.ID_ESTADO_CONSERVACION, P.QTY_PUBLICACION, P.QTY_STOCK_PUBLICACION, P.ID_ESTADO_STOCK, P.QTY_PRECIO, "
			+ "P.FE_CREACION_PUBLICACION, P.QTY_DURACION_PUBLICACION, P.QTY_CLICK, P.ARC_IMAGEN1, P.ARC_IMAGEN2, P.ARC_IMAGEN3, "
			
			+ "C.NO_CATEGORIA, C.DE_CATEGORIA, C.ID_CATEGORIA_PADRE, "
			
			+ "PE.ID_TIPO_PERSONA, PE.NO_PERSONA, PE.NO_PATERNO, PE.NO_MATERNO, PE.ID_SEXO, PE.ID_TIPO_DOCUMENTO, PE.NU_DOCUMENTO, PE.NO_CORREO, PE.NU_CELULAR, PE.FE_NACIMIENTO "
			
			+ "from tb_publicacion P, tb_categoria C, tb_persona PE "
			
			+ "where P.ID_CATEGORIA = C.ID_CATEGORIA and P.ID_PERSONA = PE.ID_PERSONA and P.ID_PERSONA = ?";
		
		Collection<MPublicacion> lista = new ArrayList<MPublicacion>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = UConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idPersona);
			rs = stmt.executeQuery();
			while (rs.next()) {
				MPublicacion mPublicacionTemp = new MPublicacion();
				MCategoria mCategoria = new MCategoria();
				MPersona mPersona = new MPersona();
				
				mCategoria.setIdCategoria(rs.getInt("P.ID_CATEGORIA"));
				mCategoria.setNoCategoria(rs.getString("C.NO_CATEGORIA"));
				mCategoria.setDeCategoria(rs.getString("C.DE_CATEGORIA"));
				mCategoria.setIdCategoriaPadre(rs.getInt("C.ID_CATEGORIA_PADRE"));
				
				mPersona.setIdPersona(rs.getInt("P.ID_PERSONA"));
				mPersona.setIdTipoPersona(rs.getInt("PE.ID_TIPO_PERSONA"));
				mPersona.setNoPersona(rs.getString("PE.NO_PERSONA"));
				mPersona.setNoPaterno(rs.getString("PE.NO_PATERNO"));
				mPersona.setNoMaterno(rs.getString("PE.NO_MATERNO"));
				mPersona.setIdSexo(rs.getInt("PE.ID_SEXO"));
				mPersona.setIdTipoDocumento(rs.getInt("PE.ID_TIPO_DOCUMENTO"));
				mPersona.setNuDocumento(rs.getString("PE.NU_DOCUMENTO"));
				mPersona.setNoCorreo(rs.getString("PE.NO_CORREO"));
				mPersona.setNuCelular(rs.getString("PE.NU_CELULAR"));
				mPersona.setFeNacimiento(rs.getDate("PE.FE_NACIMIENTO"));
				
				mPublicacionTemp.setIdPublicacion(rs.getInt("P.ID_PUBLICACION"));
				mPublicacionTemp.setCategoria(mCategoria);
				mPublicacionTemp.setPersona(mPersona);
				mPublicacionTemp.setNoTitulo(rs.getString("P.NO_TITULO"));
				mPublicacionTemp.setNoDescripcion(rs.getString("P.NO_DESCRIPCION"));
				mPublicacionTemp.setIdEstadoConservacion(rs.getInt("P.ID_ESTADO_CONSERVACION"));
				mPublicacionTemp.setQtyPublicacion(rs.getInt("P.QTY_PUBLICACION"));
				mPublicacionTemp.setQtyStockPublicacion(rs.getInt("P.QTY_STOCK_PUBLICACION"));
				mPublicacionTemp.setIdEstadoStock(rs.getInt("P.ID_ESTADO_STOCK"));
				mPublicacionTemp.setQtyPrecio(rs.getDouble("P.QTY_PRECIO"));
				mPublicacionTemp.setFeCreacionPublicacion(rs.getDate("P.FE_CREACION_PUBLICACION"));
				mPublicacionTemp.setQtyDuracionPublicacion(rs.getInt("P.QTY_DURACION_PUBLICACION"));
				mPublicacionTemp.setQtyClick(rs.getInt("P.QTY_CLICK"));
				mPublicacionTemp.setArcImagen1(rs.getString("P.ARC_IMAGEN1"));
				mPublicacionTemp.setArcImagen2(rs.getString("P.ARC_IMAGEN2"));
				mPublicacionTemp.setArcImagen3(rs.getString("P.ARC_IMAGEN3"));
				
				lista.add(mPublicacionTemp);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new EExcepcionDAO(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
	public Collection<MPublicacion> listarPublicacionesRecomendadas() throws EExcepcionDAO {
		
		String query = "select P.ID_PUBLICACION, P.ID_CATEGORIA, P.ID_PERSONA, P.NO_TITULO, P.NO_DESCRIPCION, "
			+ "P.ID_ESTADO_CONSERVACION, P.QTY_PUBLICACION, P.QTY_STOCK_PUBLICACION, P.ID_ESTADO_STOCK, P.QTY_PRECIO, "
			+ "P.FE_CREACION_PUBLICACION, P.QTY_DURACION_PUBLICACION, P.QTY_CLICK, P.ARC_IMAGEN1, P.ARC_IMAGEN2, P.ARC_IMAGEN3, "
			
			+ "C.NO_CATEGORIA, C.DE_CATEGORIA, C.ID_CATEGORIA_PADRE, "
			
			+ "PE.ID_TIPO_PERSONA, PE.NO_PERSONA, PE.NO_PATERNO, PE.NO_MATERNO, PE.ID_SEXO, PE.ID_TIPO_DOCUMENTO, PE.NU_DOCUMENTO, PE.NO_CORREO, PE.NU_CELULAR, PE.FE_NACIMIENTO "
			
			+ "from tb_publicacion P, tb_categoria C, tb_persona PE "
			
			+ "where P.ID_CATEGORIA = C.ID_CATEGORIA and P.ID_PERSONA = PE.ID_PERSONA order by P.QTY_CLICK desc limit 10";
		
		Collection<MPublicacion> lista = new ArrayList<MPublicacion>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = UConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				MPublicacion mPublicacionTemp = new MPublicacion();
				MCategoria mCategoria = new MCategoria();
				MPersona mPersona = new MPersona();
				
				mCategoria.setIdCategoria(rs.getInt("P.ID_CATEGORIA"));
				mCategoria.setNoCategoria(rs.getString("C.NO_CATEGORIA"));
				mCategoria.setDeCategoria(rs.getString("C.DE_CATEGORIA"));
				mCategoria.setIdCategoriaPadre(rs.getInt("C.ID_CATEGORIA_PADRE"));
				
				mPersona.setIdPersona(rs.getInt("P.ID_PERSONA"));
				mPersona.setIdTipoPersona(rs.getInt("PE.ID_TIPO_PERSONA"));
				mPersona.setNoPersona(rs.getString("PE.NO_PERSONA"));
				mPersona.setNoPaterno(rs.getString("PE.NO_PATERNO"));
				mPersona.setNoMaterno(rs.getString("PE.NO_MATERNO"));
				mPersona.setIdSexo(rs.getInt("PE.ID_SEXO"));
				mPersona.setIdTipoDocumento(rs.getInt("PE.ID_TIPO_DOCUMENTO"));
				mPersona.setNuDocumento(rs.getString("PE.NU_DOCUMENTO"));
				mPersona.setNoCorreo(rs.getString("PE.NO_CORREO"));
				mPersona.setNuCelular(rs.getString("PE.NU_CELULAR"));
				mPersona.setFeNacimiento(rs.getDate("PE.FE_NACIMIENTO"));
				
				mPublicacionTemp.setIdPublicacion(rs.getInt("P.ID_PUBLICACION"));
				mPublicacionTemp.setCategoria(mCategoria);
				mPublicacionTemp.setPersona(mPersona);
				mPublicacionTemp.setNoTitulo(rs.getString("P.NO_TITULO"));
				mPublicacionTemp.setNoDescripcion(rs.getString("P.NO_DESCRIPCION"));
				mPublicacionTemp.setIdEstadoConservacion(rs.getInt("P.ID_ESTADO_CONSERVACION"));
				mPublicacionTemp.setQtyPublicacion(rs.getInt("P.QTY_PUBLICACION"));
				mPublicacionTemp.setQtyStockPublicacion(rs.getInt("P.QTY_STOCK_PUBLICACION"));
				mPublicacionTemp.setIdEstadoStock(rs.getInt("P.ID_ESTADO_STOCK"));
				mPublicacionTemp.setQtyPrecio(rs.getDouble("P.QTY_PRECIO"));
				mPublicacionTemp.setFeCreacionPublicacion(rs.getDate("P.FE_CREACION_PUBLICACION"));
				mPublicacionTemp.setQtyDuracionPublicacion(rs.getInt("P.QTY_DURACION_PUBLICACION"));
				mPublicacionTemp.setQtyClick(rs.getInt("P.QTY_CLICK"));
				mPublicacionTemp.setArcImagen1(rs.getString("P.ARC_IMAGEN1"));
				mPublicacionTemp.setArcImagen2(rs.getString("P.ARC_IMAGEN2"));
				mPublicacionTemp.setArcImagen3(rs.getString("P.ARC_IMAGEN3"));
				
				lista.add(mPublicacionTemp);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new EExcepcionDAO(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
	public Collection<MPublicacion> listarPublicacionesVendidas() throws EExcepcionDAO {
		
		String query = "select P.ID_PUBLICACION, P.ID_CATEGORIA, P.ID_PERSONA, P.NO_TITULO, P.NO_DESCRIPCION, "
			+ "P.ID_ESTADO_CONSERVACION, P.QTY_PUBLICACION, P.QTY_STOCK_PUBLICACION, P.ID_ESTADO_STOCK, P.QTY_PRECIO, "
			+ "P.FE_CREACION_PUBLICACION, P.QTY_DURACION_PUBLICACION, P.QTY_CLICK, P.ARC_IMAGEN1, P.ARC_IMAGEN2, P.ARC_IMAGEN3, "
			
			+ "C.NO_CATEGORIA, C.DE_CATEGORIA, C.ID_CATEGORIA_PADRE, "
			
			+ "PE.ID_TIPO_PERSONA, PE.NO_PERSONA, PE.NO_PATERNO, PE.NO_MATERNO, PE.ID_SEXO, PE.ID_TIPO_DOCUMENTO, PE.NU_DOCUMENTO, PE.NO_CORREO, PE.NU_CELULAR, PE.FE_NACIMIENTO "
			
			+ "from tb_publicacion P, tb_categoria C, tb_persona PE "
			
			+ "where P.ID_CATEGORIA = C.ID_CATEGORIA and P.ID_PERSONA = PE.ID_PERSONA and P.QTY_STOCK_PUBLICACION > 0 order by P.QTY_CLICK desc limit 10";
		
		Collection<MPublicacion> lista = new ArrayList<MPublicacion>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = UConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				MPublicacion mPublicacionTemp = new MPublicacion();
				MCategoria mCategoria = new MCategoria();
				MPersona mPersona = new MPersona();
				
				mCategoria.setIdCategoria(rs.getInt("P.ID_CATEGORIA"));
				mCategoria.setNoCategoria(rs.getString("C.NO_CATEGORIA"));
				mCategoria.setDeCategoria(rs.getString("C.DE_CATEGORIA"));
				mCategoria.setIdCategoriaPadre(rs.getInt("C.ID_CATEGORIA_PADRE"));
				
				mPersona.setIdPersona(rs.getInt("P.ID_PERSONA"));
				mPersona.setIdTipoPersona(rs.getInt("PE.ID_TIPO_PERSONA"));
				mPersona.setNoPersona(rs.getString("PE.NO_PERSONA"));
				mPersona.setNoPaterno(rs.getString("PE.NO_PATERNO"));
				mPersona.setNoMaterno(rs.getString("PE.NO_MATERNO"));
				mPersona.setIdSexo(rs.getInt("PE.ID_SEXO"));
				mPersona.setIdTipoDocumento(rs.getInt("PE.ID_TIPO_DOCUMENTO"));
				mPersona.setNuDocumento(rs.getString("PE.NU_DOCUMENTO"));
				mPersona.setNoCorreo(rs.getString("PE.NO_CORREO"));
				mPersona.setNuCelular(rs.getString("PE.NU_CELULAR"));
				mPersona.setFeNacimiento(rs.getDate("PE.FE_NACIMIENTO"));
				
				mPublicacionTemp.setIdPublicacion(rs.getInt("P.ID_PUBLICACION"));
				mPublicacionTemp.setCategoria(mCategoria);
				mPublicacionTemp.setPersona(mPersona);
				mPublicacionTemp.setNoTitulo(rs.getString("P.NO_TITULO"));
				mPublicacionTemp.setNoDescripcion(rs.getString("P.NO_DESCRIPCION"));
				mPublicacionTemp.setIdEstadoConservacion(rs.getInt("P.ID_ESTADO_CONSERVACION"));
				mPublicacionTemp.setQtyPublicacion(rs.getInt("P.QTY_PUBLICACION"));
				mPublicacionTemp.setQtyStockPublicacion(rs.getInt("P.QTY_STOCK_PUBLICACION"));
				mPublicacionTemp.setIdEstadoStock(rs.getInt("P.ID_ESTADO_STOCK"));
				mPublicacionTemp.setQtyPrecio(rs.getDouble("P.QTY_PRECIO"));
				mPublicacionTemp.setFeCreacionPublicacion(rs.getDate("P.FE_CREACION_PUBLICACION"));
				mPublicacionTemp.setQtyDuracionPublicacion(rs.getInt("P.QTY_DURACION_PUBLICACION"));
				mPublicacionTemp.setQtyClick(rs.getInt("P.QTY_CLICK"));
				mPublicacionTemp.setArcImagen1(rs.getString("P.ARC_IMAGEN1"));
				mPublicacionTemp.setArcImagen2(rs.getString("P.ARC_IMAGEN2"));
				mPublicacionTemp.setArcImagen3(rs.getString("P.ARC_IMAGEN3"));
				
				lista.add(mPublicacionTemp);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new EExcepcionDAO(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
	public MPublicacion ObtenerPublicacion(int idPublicacion) throws EExcepcionDAO {
		
		String query = "select P.ID_PUBLICACION, P.ID_CATEGORIA, P.ID_PERSONA, P.NO_TITULO, P.NO_DESCRIPCION, "
			+ "P.ID_ESTADO_CONSERVACION, P.QTY_PUBLICACION, P.QTY_STOCK_PUBLICACION, P.ID_ESTADO_STOCK, P.QTY_PRECIO, "
			+ "P.FE_CREACION_PUBLICACION, P.QTY_DURACION_PUBLICACION, P.QTY_CLICK, P.ARC_IMAGEN1, P.ARC_IMAGEN2, P.ARC_IMAGEN3, "
			
			+ "C.NO_CATEGORIA, C.DE_CATEGORIA, C.ID_CATEGORIA_PADRE, "
			
			+ "PE.ID_TIPO_PERSONA, PE.NO_PERSONA, PE.NO_PATERNO, PE.NO_MATERNO, PE.ID_SEXO, PE.ID_TIPO_DOCUMENTO, PE.NU_DOCUMENTO, PE.NO_CORREO, PE.NU_CELULAR, PE.FE_NACIMIENTO "
			
			+ "from tb_publicacion P, tb_categoria C, tb_persona PE "
			
			+ "where P.ID_CATEGORIA = C.ID_CATEGORIA and P.ID_PERSONA = PE.ID_PERSONA and P.ID_PUBLICACION = ?";
		
		MPublicacion mPublicacion = new MPublicacion();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = UConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idPublicacion);
			rs = stmt.executeQuery();
			while (rs.next()) {
				MCategoria mCategoria = new MCategoria();
				MPersona mPersona = new MPersona();
				
				mCategoria.setIdCategoria(rs.getInt("P.ID_CATEGORIA"));
				mCategoria.setNoCategoria(rs.getString("C.NO_CATEGORIA"));
				mCategoria.setDeCategoria(rs.getString("C.DE_CATEGORIA"));
				mCategoria.setIdCategoriaPadre(rs.getInt("C.ID_CATEGORIA_PADRE"));
				
				mPersona.setIdPersona(rs.getInt("P.ID_PERSONA"));
				mPersona.setIdTipoPersona(rs.getInt("PE.ID_TIPO_PERSONA"));
				mPersona.setNoPersona(rs.getString("PE.NO_PERSONA"));
				mPersona.setNoPaterno(rs.getString("PE.NO_PATERNO"));
				mPersona.setNoMaterno(rs.getString("PE.NO_MATERNO"));
				mPersona.setIdSexo(rs.getInt("PE.ID_SEXO"));
				mPersona.setIdTipoDocumento(rs.getInt("PE.ID_TIPO_DOCUMENTO"));
				mPersona.setNuDocumento(rs.getString("PE.NU_DOCUMENTO"));
				mPersona.setNoCorreo(rs.getString("PE.NO_CORREO"));
				mPersona.setNuCelular(rs.getString("PE.NU_CELULAR"));
				mPersona.setFeNacimiento(rs.getDate("PE.FE_NACIMIENTO"));
				
				mPublicacion.setIdPublicacion(rs.getInt("P.ID_PUBLICACION"));
				mPublicacion.setCategoria(mCategoria);
				mPublicacion.setPersona(mPersona);
				mPublicacion.setNoTitulo(rs.getString("P.NO_TITULO"));
				mPublicacion.setNoDescripcion(rs.getString("P.NO_DESCRIPCION"));
				mPublicacion.setIdEstadoConservacion(rs.getInt("P.ID_ESTADO_CONSERVACION"));
				mPublicacion.setQtyPublicacion(rs.getInt("P.QTY_PUBLICACION"));
				mPublicacion.setQtyStockPublicacion(rs.getInt("P.QTY_STOCK_PUBLICACION"));
				mPublicacion.setIdEstadoStock(rs.getInt("P.ID_ESTADO_STOCK"));
				mPublicacion.setQtyPrecio(rs.getDouble("P.QTY_PRECIO"));
				mPublicacion.setFeCreacionPublicacion(rs.getDate("P.FE_CREACION_PUBLICACION"));
				mPublicacion.setQtyDuracionPublicacion(rs.getInt("P.QTY_DURACION_PUBLICACION"));
				mPublicacion.setQtyClick(rs.getInt("P.QTY_CLICK"));
				mPublicacion.setArcImagen1(rs.getString("P.ARC_IMAGEN1"));
				mPublicacion.setArcImagen2(rs.getString("P.ARC_IMAGEN2"));
				mPublicacion.setArcImagen3(rs.getString("P.ARC_IMAGEN3"));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new EExcepcionDAO(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return mPublicacion;
	}
	
	public MPublicacion actualizarEstadoStock(MPublicacion mPublicacion) throws EExcepcionDAO {
		String query = "update tb_publicacion set ID_ESTADO_STOCK = ? where ID_PUBLICACION = ?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = UConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, mPublicacion.getIdEstadoStock());
			stmt.setInt(2, mPublicacion.getIdPublicacion());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar el registro.");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new EExcepcionDAO(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return mPublicacion;
	}
	
	public MPublicacion actualizarStock(MPublicacion mPublicacion) throws EExcepcionDAO {
		String query = "update tb_publicacion set QTY_STOCK_PUBLICACION = ? where ID_PUBLICACION = ?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = UConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, mPublicacion.getIdEstadoStock());
			stmt.setInt(2, mPublicacion.getIdPublicacion());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar el registro.");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new EExcepcionDAO(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return mPublicacion;
	}
	
	public MPublicacion actualizarNroClick(MPublicacion mPublicacion) throws EExcepcionDAO {
		String query = "update tb_publicacion set QTY_CLICK = ? where ID_PUBLICACION = ?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = UConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, mPublicacion.getQtyClick());
			stmt.setInt(2, mPublicacion.getIdPublicacion());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar el registro.");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new EExcepcionDAO(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return mPublicacion;
	}
	
}
